#define _CRT_SECURE_NO_WARNINGS 1
#include <cmath>
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include<math.h>
#include<stdlib.h>
#include<stdio.h>
#include<unordered_map>
#include<queue>
using namespace std;


  struct ListNode {
     int val;
      ListNode *next;
      ListNode() : val(0), next(nullptr) {}
      ListNode(int x) : val(x), next(nullptr) {}
      ListNode(int x, ListNode *next) : val(x), next(next) {}
  };
  class Solution {
  public:
      ListNode* reverseKGroup(ListNode* head, int k) {
          int len = 0;
          ListNode* tmp = head;
          while (tmp)
          {
              tmp = tmp->next;
              len++;
          }
          ListNode* hd = new ListNode();
          ListNode* prev = hd;
          int num = len / k;
          while (head)
          {
              if (num > 0)
              {
                  int count = k;
                  tmp = head;
                  while (count--)
                  {
                      ListNode* temp = head->next;
                      head->next = prev->next;
                      prev->next = head;
                      head = temp;
                  }
                  prev = tmp;
                  num--;
              }
              else
              {
                  prev->next = head;
                  break;
              }
          }
          tmp = hd->next;
          delete hd;
          return tmp;
      }
  };

int main() {
    return 0;
}